#include "mainwindow.h"
#include "ui_mainwindow.h"


#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //修改窗口标题
    this->setWindowTitle("简单记事本");

    //获取菜单栏并设置
    QMenuBar* menuBar = this->menuBar();
    this->setMenuBar(menuBar);

    //添加菜单
    QMenu* menu = new QMenu("文件");
    menuBar->addMenu(menu);

    //添加菜单项
    QAction* action1 = new QAction("打开");
    QAction* action2 = new QAction("保存");
    menu->addAction(action1);
    menu->addAction(action2);

    //指定输入框并设置为核心窗口控件
    edit = new QPlainTextEdit();
    QFont font;
    font.setPixelSize(30);
    edit->setFont(font);
    this->setCentralWidget(edit);

    //连接QAction的信号槽
    connect(action1,&QAction::triggered,this,&MainWindow::handleAction1);
    connect(action2,&QAction::triggered,this,&MainWindow::handleAction2);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handleAction1()
{
    //1.先弹出打开文件的对话框,让用户选择打开哪个文件
    QString path = QFileDialog::getOpenFileName(this);

    //2.把文件名显示在状态栏里
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);

    //3.根据用户选择的路径,构造一个QFile对象,并打开文件
    QFile file(path);
    bool ret = file.open(QIODevice::ReadOnly);
    if(ret == false){
        //打开文件失败,通过状态栏提示用户
        statusBar->showMessage(path + "文件打开失败");
        return;
    }

    //4.读取文件
    //前提是确保打开文件是一个文本文件，不能是二进制文件
    //QString类对象可以直接用QByteArray类对象直接赋值,QFile类的readAll函数返回值为QByteArray类对象
    QString text = file.readAll();

    //5.关闭文件
    file.close();

    //6.将读取到的内容设置到输入框中
    edit->setPlainText(text);

}

void MainWindow::handleAction2()
{
    //1.先弹出保存文件的对话框
    QString path = QFileDialog::getSaveFileName(this);

    //2.把文件名显示在状态栏里
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);

    //3.根据用户选择的路径,构造一个QFile对象,并打开文件
    QFile file(path);
    bool ret = file.open(QIODevice::WriteOnly);
    if(ret == false){
        //打开文件失败,通过状态栏提示用户
        statusBar->showMessage(path + "文件打开失败");
        return;
    }

    //4.获取写入数据并且写入文件
    const QString& text = edit->toPlainText();
    file.write(text.toUtf8());  //通过toUtf8()函数,可以把QString对象转换成QByteArray对象，再写入即可

    //5.关闭文件
    file.close();
}

